AWS IoTのログをCloudWatch Logsで取得する #reinvent
ども、大瀧です。
AWSのカンファレンスイベント、re:Invent 2015で発表&ベータがローンチされたAWS IoT、皆さん触ってますか?
メッセージブローカーやルールエンジンなど、複数の設定を組み合わせて利用する上で、実際にどのように処理されたのか、エラーが発生していないかなど検証時にログを取りたいこともあると思います。そこで今回は、AWSのロギングサービスであるCloudWatch Logsでログを取得してみたいと思います。
設定手順
1. IAMロールの作成
まずは、AWS IoTからCloudWatch Logsへのアクセス許可を定義するIAMロールを作成します。IAMの管理画面から[Create New Role]をクリックします。
適当なロール名(今回はaws_iot_cloudwatchlogs
)を入力し、[Next Step]をクリックします。
[AWS Service Roles]から「AWS IoT」の右にある[Select]ボタンをクリックします。
[Attach Policy]画面では、「AWSIoTLogging」ポリシーを選択し、[Next Step]をクリックします。
確認画面では、内容を確認し[Create Role]をクリックすればロールが作成されます。
これでOKです。作成したIAMロールのARNを控えておきましょう。
2. CloudWatch Logsの有効化
AWS IoTでのCloudWatch Logsの有効化は、AWS CLIにあるaws iot set-logging-options
コマンドを実行します。--logging-options-payload
オプションに先ほど作成したIAMロールのARNとログレベルを指定します。今回はINFOレベルに設定します。
$ aws iot set-logging-options --logging-options-payload roleArn="arn:aws:iam::XXXXXXXXXXXX:role/aws_iot_cloudwatchlogs",logLevel="INFO" $
これで完了です!
動作確認
では試しに、前回のエントリーで設定したS3にメッセージを保存するルールにこちらのエントリーにあるHTTPSエンドポイントへのメッセージPublishを試して、ログの様子を見てみます。
$ aws iot-data publish --topic topic/test --qos 1 --payload '{"message" : "Test Message"}' --endpoint-url https://XXXXXXXXXXXX.iot.ap-northeast-1.amazonaws.com $
CloudWatch Logの画面を見てみるとAWSIotLogs
ロググループが作成され、以下のようなログが確認できます。
メッセージのPublishが成功、ルールエンジンS3Ruleが適用、S3への」へのPutが成功したことがわかりますね。
まとめ
AWS IoTでのログの有効化をご紹介しました。ログをうまく使ってAWS IoTを効率良くデバッグしましょう!